import axios from "axios";
import store from "@/store";
import { clearToken, clearProfile } from "@/store/modules/userStore";
import { message } from "antd";

//实例一个axios对象
const request = axios.create({
  timeout: 10000,
});

//请求拦截器
request.interceptors.request.use(
  (config) => {
    const token = store.getState().user.token;

    // 确保url以VITE_API_PREFIX开头
    if (config.url && !config.url.startsWith(import.meta.env.VITE_API_PREFIX)) {
      config.url = import.meta.env.VITE_API_PREFIX + config.url;
    }

    // 设置请求头携带token
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }

    // 设置请求头携带客户端类型
    config.headers["X-Client-Type"] = `${import.meta.env.VITE_CLIENT_TYPE}`;
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

//响应拦截器
request.interceptors.response.use(
  (response) => {
    if (response.status === 200) {
      return response.data;
    } else {
      return Promise.reject(new Error("请求失败"));
    }
  },
  (error) => {
    console.log(error);
    if (error.code === "ECONNABORTED") {
      message.error("请求超时，请稍后重试！");
    } else if (error.response.status === 401) {
      store.dispatch(clearToken());
      store.dispatch(clearProfile());
      message.warning("用户信息失效，请重新登录！");
    } else if (error.response.status === 500) {
      message.error("服务器内部错误，请稍后再试！");
      // if (error.request) {
      //   if (error.request.ontimeout) {
      //     ElMessage.error("请求超时，请检查网络连接！");
      //   } else {
      //     console.log(error.request);
      //   }
      // } else if (error.response) {
      //   // console.log(
      //   //   error.response.data,
      //   //   error.response.status,
      //   //   error.response.headers
      //   // );
      //   if (error.response.status === 401) {
      //     useTokenStore().removeToken();
      //     ElMessage.warning("用户信息失效，请重新登录！");
      //     router.push("/login-register");
      //   } /* else if (error.response.status === 403) {
      //     router.push("/403");
      //   } else if (error.response.status === 404) {
      //     router.push("/404");
      //   }  else if (error.response.status === 500) {
      //     router.push("/500");
      //   } */
    } else {
      message.error("请求失败，请稍后再试！");
      console.log("Error", error.message);
    }
    return Promise.reject(error);
  }
);

//导出request对象
export default request;
